<?php

namespace app\api\controller;

use app\admin\model\activtyc\Single;
use app\common\controller\Api;
use app\common\validate\serial\Log;
use think\Db;
use EasyWeChat\Factory;
use think\Session;
use app\index\controller\Assistant;

/**
 * 活动领取
 */
class Ques extends Api
{

    //如果$noNeedLogin为空表示所有接口都需要登录才能请求
    //如果$noNeedRight为空表示所有接口都需要验证权限才能请求
    //如果接口已经设置无需登录,那也就无需鉴权了
    //
    // 无需登录的接口,*表示全部
    protected $noNeedLogin = ['*'];
  
    protected $noNeedRight = ['*'];
    protected $model;

    public  $app = null;

    public  $config = [
        // 必要配置
        'app_id'             => 'wx1f8725eef4e232a4',
        'mch_id'             => '1502026301',
        'key'                => '7xuEuQHG1nyCihYc0NgU0QAuvQT4sHvt',   // API 密钥
        // 如需使用敏感接口（如退款、发送红包等）需要配置 API 证书路径(登录商户平台下载 API 证书)
        'cert_path'          => '../../extend/cert/apiclient_cert.pem', // XXX: 绝对路径！！！！
        'key_path'           => '../../extend/cert/apiclient_key.pem',      // XXX: 绝对路径！！！！
        'notify_url'         => '默认的订单回调地址',     // 你也可以在下单时单独设置来想覆盖它
    ];

    public function _initialize(){
        $this->app = Factory::payment($this->config);
        $this->model = new \app\admin\model\activtyc\Single;
        $this->Guessingmodel = new \app\admin\model\activtyc\Guessing;
    }

    public function notify()
    {
        $response = $this->app->handlePaidNotify(function($message, $fail){
            // 使用通知里的 "微信支付订单号" 或者 "商户订单号" 去自己的数据库找到订单
            $out_trade_no = $message['out_trade_no'];
            //修改字段
            $row = $this->model->get(['out_trade_no'=>$out_trade_no,'pay'=>0]);
            if (!$row) { // 如果订单不存在 或者 订单已经支付过了
                return true; // 告诉微信，我已经处理完了，订单没找到，别再通知我了
            }
            ///////////// <- 建议在这里调用微信的【订单查询】接口查一下该笔订单的情况，确认是已经支付 /////////////

            if ($message['return_code'] === 'SUCCESS') { // return_code 表示通信状态，不代表支付状态
                // 用户是否支付成功
                $row->pay = 1;
            }
            $row->save(); // 保存订单
            return true; // 返回处理完成
        });
        $response->send(); // return $response;
    }
   

    public function pay()
    {

        $row = $this->model->get(9);
        print_r($row->shen_text);exit;

        $user = Session::get('wechat_user');
        $result = $this->app->order->unify([
            'body' => '《考前突破卷·数学》领取',
            'out_trade_no' => '20150806125346'.date('ymdhis'),
            'total_fee' => 6,
            'notify_url' => 'https://oa.fc62.com/api/Activity/notify', // 支付结果通知网址，如果不设置则会使用配置里的默认地址
            'trade_type' => 'JSAPI', // 请对应换成你的支付方式对应的值类型
            'openid' => 'ovS7ms11fzsyG5RI3ddxm57MjU7I',
        ]);
        $jssdk = $this->app->jssdk;
        $json = $jssdk->bridgeConfig($result['prepay_id']);
        echo "<pre>";
        print_r($json);exit;
    }

    public function single()
    {
        $sum = config('site.single_price')*100; 
        $user = Session::get('wechat_user');
        $row = $this->request->request();
        $row['out_trade_no'] = 'hdyjsingle'.date('ymdhis').mt_rand(999, 9999);
        unset($row['s']);
        if($this->model->where('openid','=',$user['id'])->where('pay','=',1)->where('type','=',$row['type'])->find()) {
             $this->error('已经支付，不可重复支付');
        }elseif($result = $this->model->where('openid','=',$user['id'])->where('pay','=',0)->where('type','=',$row['type'])->find()){
            $row['out_trade_no'] = $result['out_trade_no'];
        }else{
            $row['openid'] = $user['id'];
            $row['url'] = $user['avatar'];
            $row['sum'] = $sum;
            $row['name'] = $user['name'];
            $result = $this->model->allowField(true)->save($row);
        }
        if ($result !== false) {
            $result = $this->app->order->unify([
                'body' => '一元小课单科体验活动',
                'out_trade_no' => $row['out_trade_no'],
                'total_fee' => $sum,
                'notify_url' => 'https://oa.fc62.com/api/ques/notify', // 支付结果通知网址，如果不设置则会使用配置里的默认地址
                'trade_type' => 'JSAPI', // 请对应换成你的支付方式对应的值类型
                'openid' => $user['id'],
            ]);
            $jssdk = $this->app->jssdk;
            $json = $jssdk->bridgeConfig($result['prepay_id']);
            $this->success('添加成功',json_decode($json,true));
        } else {
            $this->error('添加失败');
        }
    }
     public function notify_guessing()
    {
        $response = $this->app->handlePaidNotify(function($message, $fail){
            // 使用通知里的 "微信支付订单号" 或者 "商户订单号" 去自己的数据库找到订单
            $out_trade_no = $message['out_trade_no'];
            //修改字段
            $row = $this->Guessingmodel->get(['out_trade_no'=>$out_trade_no,'pay'=>0]);
            if (!$row) { // 如果订单不存在 或者 订单已经支付过了
                return true; // 告诉微信，我已经处理完了，订单没找到，别再通知我了
            }
            ///////////// <- 建议在这里调用微信的【订单查询】接口查一下该笔订单的情况，确认是已经支付 /////////////

            if ($message['return_code'] === 'SUCCESS') { // return_code 表示通信状态，不代表支付状态
                // 用户是否支付成功
                $row->pay = 1;
            }
            $row->save(); // 保存订单
            return true; // 返回处理完成
        });
        $response->send(); // return $response;
    }
    public function guessing()
    {
        $sum = config('site.guessing_price')*100;
        $user = Session::get('wechat_user');
        $row = $this->request->request();
        $row['out_trade_no'] = 'hdyjguessing'.date('ymdhis').mt_rand(999, 9999);
        unset($row['s']);
        $where = ['contract'=>$row['contract'],'pay'=>1,'source'=>$row['source']];
        $where1 = ['openid'=>$user['id'],'pay'=>0,'contract'=>$row['contract'],'source'=>$row['source']];
        if($this->Guessingmodel->where($where)->find()) {
             $this->error('此合同已经领取,不可重复领取');
        }elseif($result = $this->Guessingmodel->where($where1)->find()){
            $row['out_trade_no'] = $result['out_trade_no'];
        }else{
            $row['openid'] = $user['id'];
            $row['url'] = $user['avatar'];
            $row['sum'] = $sum;
            $row['name'] = $row['name'];
            $result = $this->Guessingmodel->allowField(true)->save($row);
        }
        if ($result !== false) {
            $result = $this->app->order->unify([
                'body' => '预付考前猜题卷',
                'out_trade_no' => $row['out_trade_no'],
                'total_fee' => $sum,
                'notify_url' => 'https://oa.fc62.com/api/ques/notify_guessing', // 支付结果通知网址，如果不设置则会使用配置里的默认地址
                'trade_type' => 'JSAPI', // 请对应换成你的支付方式对应的值类型
                'openid' => $user['id'],
            ]);
            if($result['result_code'] === 'SUCCESS'){
                $jssdk = $this->app->jssdk;
                $json = $jssdk->bridgeConfig($result['prepay_id']);
                $this->success('添加成功',json_decode($json,true));
            }else{
                $this->error($result['err_code_des']);  
            }
        } else {
            $this->error('添加失败');
        }
    }

}
